contents

๐ŸŒณ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ทธ๋ž˜ํ”„ & ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ โ€“ ์‹ฌ์ธต ๊ฐ€์ด๋“œ์™€ ์˜ˆ์ œ


1. ๊ทธ๋ž˜ํ”„(Graph) ์•Œ๊ณ ๋ฆฌ์ฆ˜

a. ๊ธฐ๋ณธ ๊ฐœ๋…


b. ํ•ต์‹ฌ ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ(Traversal) ์•Œ๊ณ ๋ฆฌ์ฆ˜

DFS (Depth-First Search, ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)

void dfs(int node, boolean[] visited, List<Integer>[] adj) {
    visited[node] = true;
    for (int next : adj[node]) {
        if (!visited[next]) dfs(next, visited, adj);
    }
}

BFS (Breadth-First Search, ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)

void bfs(int start, List<Integer>[] adj, boolean[] visited) {
    Queue<Integer> queue = new LinkedList<>();
    queue.add(start);
    visited[start] = true;
    while (!queue.isEmpty()) {
        int node = queue.poll();
        for (int neighbor : adj[node]) {
            if (!visited[neighbor]) {
                visited[neighbor] = true;
                queue.add(neighbor);
            }
        }
    }
}

๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜

PriorityQueue<Pair> pq = new PriorityQueue<>((a, b) -> a.dist - b.dist);
pq.add(new Pair(source, 0));
while (!pq.isEmpty()) {
    Pair p = pq.poll();
    // ์ธ์ ‘ํ•œ ๋…ธ๋“œ ๊ฒ€์‚ฌ ํ›„, ๋” ์งง์€ ๊ฒฝ๋กœ ๋ฐœ๊ฒฌ ์‹œ ๊ฐฑ์‹  ๋ฐ pq์— ์ถ”๊ฐ€
}

๊ทธ ์™ธ ์ค‘์š”ํ•œ ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜


2. ํŠธ๋ฆฌ(Tree) ์•Œ๊ณ ๋ฆฌ์ฆ˜

a. ๊ธฐ๋ณธ ๊ฐœ๋…


b. ํŠธ๋ฆฌ ์ˆœํšŒ ๋ฐฉ๋ฒ•

์ค‘์œ„(Inorder), ์ „์œ„(Preorder), ํ›„์œ„(Postorder) ์ˆœํšŒ

void inorder(TreeNode root) {
    if (root == null) return;
    inorder(root.left);
    System.out.print(root.val + " ");
    inorder(root.right);
}

๋ ˆ๋ฒจ ์ˆœ์„œ ์ˆœํšŒ(Level Order, BFS)

void levelOrder(TreeNode root) {
    Queue<TreeNode> queue = new LinkedList<>();
    queue.add(root);
    while (!queue.isEmpty()) {
        TreeNode node = queue.poll();
        System.out.print(node.val + " ");
        if (node.left != null) queue.add(node.left);
        if (node.right != null) queue.add(node.right);
    }
}

์ž์ฃผ ์“ฐ์ด๋Š” ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜


3. ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ ์˜ˆ์‹œ

๊ทธ๋ž˜ํ”„(Graph):

ํŠธ๋ฆฌ(Tree):


4. ์š”์•ฝ ํ‘œ

์นดํ…Œ๊ณ ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž๋ฃŒ๊ตฌ์กฐ ํ™œ์šฉ ์‚ฌ๋ก€
๊ทธ๋ž˜ํ”„ DFS/BFS ๋ฆฌ์ŠคํŠธ/ํ/์Šคํƒ ํƒ์ƒ‰, ๊ฒ€์ƒ‰, ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
๊ทธ๋ž˜ํ”„ ๋‹ค์ต์ŠคํŠธ๋ผ/MST ์šฐ์„ ์ˆœ์œ„ ํ, DSU ๊ฐ€์ค‘์น˜ ์ตœ๋‹จ ๊ฒฝ๋กœ, ์ตœ์†Œ ๋น„์šฉ ์—ฐ๊ฒฐ
ํŠธ๋ฆฌ ์ค‘์œ„/์ „์œ„/ํ›„์œ„ ์ˆœํšŒ ์žฌ๊ท€/์Šคํƒ ์ •๋ ฌ, ์ˆœ์„œ ๊ธฐ๋ฐ˜ ํƒ์ƒ‰
ํŠธ๋ฆฌ LCA, BST ์—ฐ์‚ฐ ํŠธ๋ฆฌ ๋…ธ๋“œ ์กฐ์ƒ ํƒ์ƒ‰, ๊ฒ€์ƒ‰/์‚ฝ์ž…/์‚ญ์ œ

๐Ÿ’ก Tip:


๐ŸŒ ๊ทธ๋ž˜ํ”„(Graph) ๋Œ€ํ‘œ ์ถœ์ œ ๋ฌธ์ œ

1. ์ตœ๋‹จ ๊ฒฝ๋กœ ์ฐพ๊ธฐ

2. ์‚ฌ์ดํด ๊ฐ์ง€

3. ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST)

4. ์œ„์ƒ ์ •๋ ฌ(Topological Sort)

5. ๋ชจ๋“  ๊ฒฝ๋กœ/๋„๋‹ฌ ์—ฌ๋ถ€ ์ฐพ๊ธฐ

6. ๊ทธ๋ž˜ํ”„ ์—ฐ๊ฒฐ ์š”์†Œ ๊ฐœ์ˆ˜


๐ŸŒณ ํŠธ๋ฆฌ(Tree) ๋Œ€ํ‘œ ์ถœ์ œ ๋ฌธ์ œ

1. ํŠธ๋ฆฌ ์ˆœํšŒ(Traversal)

2. ํŠธ๋ฆฌ ์ตœ๋Œ€/์ตœ์†Œ ๊ฒฝ๋กœ ํ•ฉ

3. BST ๊ฒ€์ฆ/๊ตฌ์„ฑ

4. ํŠธ๋ฆฌ ๋’ค์ง‘๊ธฐ/๋ฆฌ๋ฒ„์Šค

5. ์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ(LCA) ์ฐพ๊ธฐ

6. ํŠธ๋ฆฌ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”


โœ… ์š”์•ฝ ํ‘œ

๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ ๋Œ€ํ‘œ ์•Œ๊ณ ๋ฆฌ์ฆ˜/ํŒจํ„ด ํŠธ๋ฆฌ ๋ฌธ์ œ ๋Œ€ํ‘œ ์•Œ๊ณ ๋ฆฌ์ฆ˜/ํŒจํ„ด
์ตœ๋‹จ ๊ฒฝ๋กœ(BFS/Dijkstra) BFS, Dijkstra, Queue ํŠธ๋ฆฌ ์ˆœํšŒ(Traversal) ์žฌ๊ท€, Stack/Queue
์‚ฌ์ดํด ๊ฐ์ง€ DFS, Union Find ์ตœ๋Œ€ ๊ฒฝ๋กœ ํ•ฉ DFS, ๋ˆ„์ ํ•ฉ
MST (์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ) Kruskal, Prim, ์šฐ์„ ์ˆœ์œ„ ํ BST ๊ฒ€์ฆ/์‚ฝ์ž…/์‚ญ์ œ ์žฌ๊ท€
์œ„์ƒ ์ •๋ ฌ DFS, BFS + Queue ํŠธ๋ฆฌ ๋ฆฌ๋ฒ„์Šค/๋’ค์ง‘๊ธฐ DFS, Swap
๋ชจ๋“  ๊ฒฝ๋กœ/์—ฐ๊ฒฐ ์š”์†Œ DFS, BFS, ์ปดํฌ๋„ŒํŠธ ๊ตฌ๋ณ„ LCA(์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ) DFS, ๊ฒฝ๋กœ ๊ธฐ๋ก
๊ทธ๋ž˜ํ”„ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” BFS/DFS, Encoding/Decoding ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” BFS/DFS, LevelOrder

๐Ÿ’ก ์‹ค์ „ ํŒ

references